﻿#define  _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>


#if 0
//bug 指在电脑系统或程序中，隐藏着一些未被发现的缺陷或者问题，简称程序漏洞。
//debug 调试，也就是找问题的过程。


int main()
{
	printf("hehe\n");
	return 0;
}

//vs调试快捷键
//F9 创建断点和取消断点
//断点作用是可以在程序的任意位置设置断点，打上断点就可以使得程序执行到想要的位置暂停执行，接下来我们就可以使用F10，F11这些快捷键观察代码的执行细节
//条件断点：满足这个条件才触发断点。
//F9一般与F5一起使用，F5启动调试，经常用来直接跳到下一个断点处。F5是来到逻辑执行的下一个断点处，也就是下方代码，我在printf打上一个断点，然后
// 再在return处打上一个断点，然后F5启动调试，我们在按一下F5他不会跳到return处，因为在逻辑执行的时候我们还要进行循环，也就是来到printf处的地方
//所以调试的过程中假如我们前面代码测试没有问题，我们还想调试的话，我们就直接在需要调试的地方打上断点，然后直接运行到断点处进行调试

int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("hehe\n");
	}
	for (i = 0; i <= 10; i++)
	{
		printf("hehe\n");
	}
	return 0;
}
//注意：运行程序不要直接按F5，F5不是用来运行程序的，它是进行调试的，如果一个断点都没有设置，那如果按下F5他就会直接全部执行完，因为没有设置断点他不知道在哪里停下，只会继续往下调试执行代码直到完成
//当我们需要跳到断点处后的代码找到bug，接下来我们就需要一步一步，逐行的进行检查调试，然后我们就需要用到下面两个快捷键
//F10 ：逐过程，通常用来处理一个过程，一个过程可以是一次函数调用或者一条语句。
//F11 ：逐语句，就是每次都执行一条语句，但是这个快捷键可以使我们的执行逻辑进入函数内部。在函数调用的地方，想要进入函数观察细节，必须使用F11，如果使用F10直接完成函数调用。

//在这里我们进行调试，假如我们只需要测试printf代码及后面的代码运行，这时候我们只需在printf处打上断点，然后F5进行调试直接运行到断点处，接下来我们使用F10逐过程进行调试
//循环测试完成后，我们想要测试函数内部的功能代码，接下来我们就得按F11进入函数内部进行观察细节
void test()
{
	printf("haha\n");
}
int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("hehe\n");
	}
	test();
	return 0;
}

int main()
{
	int arr[10] = { 0 }; //数组名字是数组首元素的地址
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		arr[i] = i + 1;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

//1到10的阶层，代码调试
int main()
{
	int i = 0;
	scanf("%d", &i);
	int j = 0;
	int sum = 0; //1到n的阶层的和
	//确定1到n的阶层的次数
	int n = 1;
	for (n = 1; n <= i; n++)
	{
		int ret = 1; //n的阶层
		for (j = 1; j <= n; j++)
		{
			ret = ret * j;
		}
		sum += ret;
	}
	printf("%d\n",sum);
	return 0;
}

//代码优化
int main()
{
	int i = 0;
	scanf("%d", &i);
	//确定1到n的阶层的次数
	int n = 1;
	int ret = 1; //n的阶层
	int sum = 0; //1到n的阶层的和
	for (n = 1; n <= i; n++)
	{
		ret = ret * n;
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12 ; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}
#endif

//编程常见错误归类
//编译型错误（语法错误）
//链接型错误
//1，标识浮名不存在
//2，拼写错误
//3，头文件没包含
//4，引用的库不存在
// 运⾏时错误：没有编译错误，没有链接错误，程序能够运行，但是结果是错误的！